package com.example.piedrapapeltijeralagartospock;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LayoutAnimationController;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Resultado extends Activity {
	// Variables de los objetos visuales
		private TextView nombreJugador1, nombreJugador2, visualizaPuntuacion1,	visualizaPuntuacion2, fraseMano, fraseVictoria;
		private ImageView opcionJugador1, opcionJugador2, botonRevancha, botonNueva, efecto1, efecto2, barra;
		private RelativeLayout botones, lagarto, piedraPapel, spock;

		// Variables logicas

		private Mano manoJugador1, manoJugador2;
		private int modoDeJuego, puntuacion1, puntuacion2;
		private String jugador1, jugador2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_resultado);
		MyListener l= new MyListener(this);
		
		//Captura de elementos visuales
		nombreJugador1 = (TextView)findViewById(R.id.jugador1);
		nombreJugador2  = (TextView)findViewById(R.id.jugador2);
		visualizaPuntuacion1  = (TextView)findViewById(R.id.puntuacion1);
		visualizaPuntuacion2  = (TextView)findViewById(R.id.puntuacion2);
		fraseMano  = (TextView)findViewById(R.id.fraseMano);
		fraseVictoria  = (TextView)findViewById(R.id.victoria);
		
		//Captura de imagenes y botones
		opcionJugador1 = (ImageView)findViewById(R.id.resultadoOpcionJugador1);
		opcionJugador2 = (ImageView)findViewById(R.id.resultadoOpcionJugador2);
		efecto1 = (ImageView)findViewById(R.id.resultadoEfecto1);
		efecto2 = (ImageView)findViewById(R.id.resultadoEfecto2);
		botonRevancha = (ImageView)findViewById(R.id.but_revancha);
		botonNueva = (ImageView)findViewById(R.id.but_reinicio);
		
		//Captura de layouts para animar
		botones = (RelativeLayout) findViewById(R.id.botones);
		lagarto = (RelativeLayout) findViewById(R.id.layLagartoAnimado);
		piedraPapel = (RelativeLayout) findViewById(R.id.layPiedraPapel2);
		spock = (RelativeLayout) findViewById(R.id.laySpock2);
		botones.setVisibility(View.GONE);
		
		//Establecimiento de listener
		botonRevancha.setOnClickListener(l);
		botonNueva.setOnClickListener(l);
		
		//Colecta de datos recibidos y almacenamiento en variables
		Bundle bundle = getIntent().getExtras();
		modoDeJuego=bundle.getInt("ModoDeJuego");
		jugador1=bundle.getString("jugador1");
		jugador2=bundle.getString("jugador2");
		puntuacion1=bundle.getInt("puntuacion1");
		puntuacion2=bundle.getInt("puntuacion2");
		manoJugador1=Mano.setInt(bundle.getInt("manoJugador1"));
		manoJugador2=Mano.setInt(bundle.getInt("manoJugador2"));
		
		//Muestra visual de los parametros necesarios
		nombreJugador1.setText(jugador1 + ": ");
		nombreJugador2.setText(" :" + jugador2);
		visualizaPuntuacion1.setText(String.valueOf(puntuacion1));
		visualizaPuntuacion2.setText(String.valueOf(puntuacion2));
		
		animacion();
			
	}
	
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		switch(keyCode){
			case KeyEvent.KEYCODE_BACK:
				toast(R.layout.toast4);
				return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	
	public void toast(int layoutToast){
		LayoutInflater inflater = getLayoutInflater();
		View layout = inflater.inflate(layoutToast,null);
		Toast toast = new Toast(getApplicationContext());
		toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
		toast.setDuration(Toast.LENGTH_LONG);
		toast.setView(layout);
		toast.show(); 
	}
	
	
	//METODOS NECESARIOS PARA EL HILO
	//Creador del control de eventos
			final Handler miHandler= new Handler();
			
			//Ejecuciones para simular movimiento
			final Runnable elementos = new Runnable(){
				public void run(){
					ponerElemento(opcionJugador1,Mano.extraerImagen(manoJugador1));
					ponerElemento(opcionJugador2,Mano.extraerImagen(manoJugador2));
				};
			};
			final Runnable frase = new Runnable(){
				public void run(){
					generarFrase();
				};
			};
			final Runnable victoria = new Runnable(){
				public void run(){
					comprobarVictoria();
				};
			};
			
			final Runnable dibujos = new Runnable(){
				public void run(){
					animar(piedraPapel,1000,0,1000,0);
					animar(lagarto,-1000,0,1000,0);
					animar(spock,1000,0,-1000,0);
				};
			};
			final Runnable botonesA = new Runnable(){
				public void run(){
					botones.setVisibility(View.VISIBLE);
				};
			};
			final Runnable lagartoA = new Runnable(){
				public void run(){
					animar(lagarto,0,0,0,5);
				};
			};
			final Runnable lagartoB = new Runnable(){
				public void run(){
					animar(lagarto,0,0,5,0);
				};
			};
						
			// Creacion del hilo
			protected void animacion() {
				Thread t = new Thread() {
					public void run() {
							try {
											
								Thread.sleep(1000);
								miHandler.post(elementos);
								Thread.sleep(1000);
								miHandler.post(frase);
								Thread.sleep(1000);
								miHandler.post(victoria);
								Thread.sleep(1500);
								miHandler.post(dibujos);
								Thread.sleep(1000);
								miHandler.post(botonesA);
								while(true){
									miHandler.post(lagartoA);
									Thread.sleep(500);
									miHandler.post(lagartoB);
									Thread.sleep(500);
								}
								
								} catch (InterruptedException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}	
					}
				};
				t.start();
			}
			
			//Metodo generico para animar
			public void animar(RelativeLayout objetoAnimar, int xOrigen,int xFin,int yOrigen,int yFin){
				AnimationSet set = new AnimationSet(true);
				Animation animation = null;
				animation = new TranslateAnimation(xOrigen,xFin,yOrigen,yFin);
				animation.setDuration(500);
				set.addAnimation(animation);
				LayoutAnimationController controlador = new LayoutAnimationController(set, 0.25f);
				objetoAnimar.setVisibility(View.VISIBLE);
				objetoAnimar.setLayoutAnimation(controlador);
				objetoAnimar.startAnimation(animation);
			}
			//FIN DE LOS METODOS
	
	
	//Metodo de ayuda para insertar una imagen en el boton
	private void ponerElemento(ImageView elemento,int imagen){
		Resources res = getResources();
		Drawable drawable = res.getDrawable(imagen);
		elemento.setImageDrawable(drawable);
	}
		
	public void comprobarVictoria(){
		int gana1=0,gana2=0;
		if(manoJugador1==Mano.PIEDRA){
			if(manoJugador2==Mano.PIEDRA){
				;}
			if(manoJugador2==Mano.PAPEL){
				gana2++;}
			if(manoJugador2==Mano.TIJERAS){
				gana1++;}
			if(manoJugador2==Mano.LAGARTO){
				gana1++;}
			if(manoJugador2==Mano.SPOCK){
				gana2++	;}
		}
		if (manoJugador1 == Mano.PAPEL) {
			if(manoJugador2==Mano.PIEDRA){
				gana1++;}
			if(manoJugador2==Mano.PAPEL){
				;}
			if(manoJugador2==Mano.TIJERAS){
				gana2++;}
			if(manoJugador2==Mano.LAGARTO){
				gana2++;}
			if(manoJugador2==Mano.SPOCK){
				gana1++;}
		}
		if (manoJugador1 == Mano.TIJERAS) {
			if(manoJugador2==Mano.PIEDRA){
				gana2++;}
			if(manoJugador2==Mano.PAPEL){
				gana1++;}
			if(manoJugador2==Mano.TIJERAS){
				;}
			if(manoJugador2==Mano.LAGARTO){
				gana1++;}
			if(manoJugador2==Mano.SPOCK){
				gana2++;}
		}
		if (manoJugador1 == Mano.LAGARTO) {
			if(manoJugador2==Mano.PIEDRA){
				gana2++;}
			if(manoJugador2==Mano.PAPEL){
				gana1++;}
			if(manoJugador2==Mano.TIJERAS){
				gana2++;}
			if(manoJugador2==Mano.LAGARTO){
				;}
			if(manoJugador2==Mano.SPOCK){
				gana1++;}
		}
		if (manoJugador1 == Mano.SPOCK) {
			if(manoJugador2==Mano.PIEDRA){
				gana1++;}
			if(manoJugador2==Mano.PAPEL){
				gana2++;}
			if(manoJugador2==Mano.TIJERAS){
				gana1++;}
			if(manoJugador2==Mano.LAGARTO){
				gana2++;}
			if(manoJugador2==Mano.SPOCK){
				;}
		}
		if(gana1==1){
			fraseVictoria.setText("Gana "+jugador1);
			puntuacion1++;
			visualizaPuntuacion1.setText(String.valueOf(puntuacion1));
			ponerElemento(efecto2,R.drawable.cancel);
			ponerElemento(efecto1,R.drawable.ok);
			
		}else if(gana2==1){
			fraseVictoria.setText("Gana "+jugador2);
			puntuacion2++;
			visualizaPuntuacion2.setText(String.valueOf(puntuacion2));
			ponerElemento(efecto1,R.drawable.cancel);
			ponerElemento(efecto2,R.drawable.ok);
		}else{
			fraseVictoria.setText("EMPATE");
		}
	}
	
	public void generarFrase(){
		int valor1=Mano.getInt(manoJugador1);
		int valor2=Mano.getInt(manoJugador2);
		//Se ordenan los valores para que aparezca primero el menor
		if(valor1>valor2){
			int aux=valor2;
			valor2=valor1;
			valor1=aux;
		}
		//Se construlle un string con los valores prenviamente ordenados considerando el formato
		//de las frases almacenadas en @String
		String valorS = String.valueOf(Mano.setInt(valor1)+"_"+Mano.setInt(valor2));
		//Se utiliza el siguiente metodo para buscar el nombre construido y hallar su id
		int valorI =Resultado.this.getResources().getIdentifier(valorS,"string",Resultado.this.getPackageName() );
		if(valor1==valor2)
			fraseMano.setText(R.string.EMPATE);
		else
			//Apartir del id hallado se muestra la frase correspondiente
			fraseMano.setText(valorI);
	}
	
	public void revancha(){
		Intent intent = new Intent(Resultado.this, Juego1.class);
		intent.putExtra("ModoDeJuego", modoDeJuego);
		intent.putExtra("jugador1", jugador1);
		intent.putExtra("jugador2", jugador2);
		intent.putExtra("puntuacion1", puntuacion1);	
		intent.putExtra("puntuacion2", puntuacion2);	
		startActivity(intent);
	}
	
	public void nueva(){
		Intent intent = new Intent(Resultado.this, Inicio.class);
		Inicio.puntuacionesFich.guardarPuntuacion(jugador1, puntuacion1, jugador2, puntuacion2);
		Inicio.puntuacionesXml.guardarPuntuacion(jugador1, puntuacion1, jugador2, puntuacion2);
		Inicio.puntuacionesSQL.guardarPuntuacion(jugador1, puntuacion1, jugador2, puntuacion2);
		startActivity(intent);	
	}
	
	
	public void aviso(){
		Toast.makeText(this, "Para jugar elija una mano", Toast.LENGTH_SHORT).show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.menu, menu);
		return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item) {
	    // Handle item selection
		 Intent intent = new Intent(this,MenuRecord.class);
	   try{
	    switch (item.getItemId()) {
	    case R.id.menuReglas:            
	        startActivity(new Intent(this,MenuReglas.class));
	        break;  
	    case R.id.menuReglasGraficas:            
	        startActivity(new Intent(this,MenuReglasGraficas.class));
	        break;
	    case R.id.menuReglasVideo:            
	    	startActivity(new Intent(this,MenuReglasVideo.class));
	        break;
	    case R.id.menuInformacion:            
	        startActivity(new Intent(this,MenuInformacion.class));
	        break;
	    case R.id.menu2ficherotxt:            
	        intent.putExtra("ModoCarga", 1);
	        startActivity(intent);
	        break;
	    case R.id.menu2ficherobin:    
	    	intent.putExtra("ModoCarga", 2);
	        startActivity(intent);
	        break;
	    case R.id.menu2ficheroxml:
	    	intent.putExtra("ModoCarga", 3);
	        startActivity(intent);
	        break;
	    case R.id.menu2basesql: 
	    	intent.putExtra("ModoCarga", 4);
	        startActivity(intent);
	        break;
	    default:
	        return super.onOptionsItemSelected(item);
	    }
	   }catch(Exception e){
		   Log.i("PiedraPapelMenu", e.getMessage(), e);
	   }
	   return true;
	}
}
